package com.shujia.day18;

import com.mysql.jdbc.Buffer;
import com.mysql.jdbc.Driver;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;

public class Demo07ReadData2Mysql {
    public static void main(String[] args) throws SQLException, IOException {

        /*
            TODO 从本地读取数据写入到Mysql数据库中
                    1.加载驱动 -> 告诉当前程序，所使用的数据库连接是谁
                    2.创建连接 -> 通过给定一些URL 用户名 密码 获取数据库连接对象
                    3.获取操作对象  -> 通过操作对象，可以执行SQL等操作
                    4.编写SQL并执行
                    5.如果当SQL有返回结果，那么需要对结果进行遍历
                    6.对操作对象以及连接进行关闭操作
         */
        long startTime = System.currentTimeMillis();
        DriverManager.registerDriver(new Driver());
        Connection connection = DriverManager.getConnection("jdbc:mysql://master:3306/bigdata_30?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", "root", "123456");
        String sql = "insert into txt2mysqlscore (stu_id,sub_id,score) values (?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        for (int i = 0; i < 20; i++) {
            readData2Mysql(preparedStatement);
        }
        preparedStatement.close();
        connection.close();
        long endTime = System.currentTimeMillis();
        System.out.println("当前程序执行时间为："+(endTime-startTime)/1000.0+"秒"); // 当前程序执行时间为：92.302秒
    }

    public static void readData2Mysql(PreparedStatement preparedStatement) throws IOException, SQLException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("data/score.txt"));

        String readLine = null;
        while ((readLine = bufferedReader.readLine()) != null) {
            // 1500100001,1000001,98
            String[] columns = readLine.split(",");
            /*
                防御型编程，在处理数据时，对于可能发生的问题，进行提前判断
             */
            if (columns.length == 3){
                String id = columns[0];
                String course_id = columns[1];
                int score = Integer.valueOf(columns[2]);
                preparedStatement.setString(1,id);
                preparedStatement.setString(2,course_id);
                preparedStatement.setInt(3,score);
                preparedStatement.executeUpdate();
            }
            // txt2mysqlscore
        }
    }
}
